package org.example.analysis.model;

/**
 * 复杂度等级
 */
public enum ComplexityLevel {
    /** 低复杂度 */
    LOW("低", 1),
    /** 中等复杂度 */
    MEDIUM("中", 2),
    /** 高复杂度 */
    HIGH("高", 3),
    /** 非常高的复杂度 */
    VERY_HIGH("非常高", 4);
    
    private final String description;
    private final int value;
    
    ComplexityLevel(String description, int value) {
        this.description = description;
        this.value = value;
    }
    
    public String getDescription() {
        return description;
    }
    
    public int getValue() {
        return value;
    }
    
    /**
     * 根据得分获取复杂度等级
     */
    public static ComplexityLevel fromScore(int score) {
        if (score >= 12) return VERY_HIGH;
        if (score >= 8) return HIGH;
        if (score >= 4) return MEDIUM;
        return LOW;
    }
    
    /**
     * 获取建议改进措施
     */
    public String getImprovementSuggestions() {
        switch (this) {
            case LOW:
                return "代码复杂度较低，符合规范。";
            case MEDIUM:
                return "建议关注以下几点：\n" +
                       "1. 检查是否可以简化条件判断\n" +
                       "2. 考虑提取重复代码为独立方法\n" +
                       "3. 确保代码注释完整";
            case HIGH:
                return "建议进行以下优化：\n" +
                       "1. 将复杂的条件判断拆分为多个方法\n" +
                       "2. 减少方法的参数数量，考虑使用对象封装\n" +
                       "3. 降低代码的嵌套层级\n" +
                       "4. 添加详细的方法和参数文档";
            case VERY_HIGH:
                return "强烈建议重构此方法：\n" +
                       "1. 将方法拆分为多个较小的方法\n" +
                       "2. 使用策略模式或状态模式简化复杂的条件逻辑\n" +
                       "3. 提取公共代码到基类或工具类\n" +
                       "4. 考虑使用设计模式优化代码结构\n" +
                       "5. 添加完整的单元测试用例";
            default:
                return "";
        }
    }
} 